home *** CD-ROM | disk | FTP | other *** search
/ Delphi 2.0 - Programmer's Utilities Power Pack / Delphi 2.0 Programmer's Utilities Power Pack.iso / s_to_z / strc10 / testbed.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1996-09-15  |  58.2 KB  |  1,845 lines

  1. unit Testbed;
  2.  
  3. interface
  4.  
  5. uses
  6.  
  7.    SysUtils,
  8.    WinTypes,
  9.    WinProcs,
  10.    Messages,
  11.    Classes,
  12.    Graphics,
  13.    Controls,
  14.    Forms,
  15.    Dialogs,
  16.    StdCtrls,
  17.    ExtCtrls,
  18.    SafeStr,
  19.    StrClass,
  20.    ContainR, Console;
  21.  
  22. type
  23.   TSCTestBed = class(TForm)
  24.     FuncLb    : TListbox;
  25.     GroupBox1 : TGroupBox;
  26.     OutConsole: TConsole;
  27.     Label1: TLabel;
  28.     Label2: TLabel;
  29.     Label3: TLabel;
  30.     procedure Button1Click(Sender: TObject);
  31.     procedure FormCreate(Sender: TObject);
  32.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  33.     procedure FuncLbClick(Sender: TObject);
  34.   private
  35.      TheFuncList : TRecordContainer;
  36.     { Private declarations }
  37.     PROCEDURE RunTest(fid : WORD);
  38.     PROCEDURE SetupFuncLb;
  39.   public
  40.     { Public declarations }
  41.   end;
  42.  
  43. var
  44.   SCTestBed: TSCTestBed;
  45.  
  46. implementation
  47.  
  48. {$R *.DFM}
  49.  
  50. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  51.  
  52. CONST
  53.  
  54.    id_Create = 1;
  55.    id_CreateSize = 2;
  56.    id_CreateString =3;
  57.    id_CreateStringNL = 4;
  58.    id_CreateBoolean = 5;
  59.    id_Destroy = 6;
  60.    id_Copy = 7;
  61.    id_CopyFrom = 8;
  62.    id_Clear = 9;
  63.    id_Empty = 10;
  64.    id_Assign = 11;
  65.    id_AssignFrom = 12;
  66.    id_AssignLen = 13;
  67.    id_AssignMid = 14;
  68.    id_AssignNL = 15;
  69.    id_AssignPad = 16;
  70.    id_AssignRight = 17;
  71.    id_AssignTrim = 18;
  72.    id_Append = 19;
  73.    id_AppendBoolean = 20;
  74.    id_AppendByte = 21;
  75.    id_AppendCh = 22;
  76.    id_AppendDIC = 23;
  77.    id_AppendDouble = 24;
  78.    id_AppendDoubleTrim = 25;
  79.    id_AppendExt = 26;
  80.    id_AppendExtTrim = 27;
  81.    id_AppendLen = 28;
  82.    id_AppendLong = 29;
  83.    id_AppendMid = 30;
  84.    id_AppendNL = 31;
  85.    id_AppendPad = 32;
  86.    id_AppendPtr = 33;
  87.    id_AppendReal = 34;
  88.    id_AppendRight = 35;
  89.    id_AppendSIC = 36;
  90.    id_AppendTrim = 37;
  91.    id_AppendWithTab = 38;
  92.    id_NLAppend = 39;
  93.    id_Prepend = 40;
  94.    id_FirstNonSpaceCh = 41;
  95.    id_HasCh = 42;
  96.    id_isCh = 43;
  97.    id_IsFirstCh = 44;
  98.    id_IsLastCh = 45;
  99.    id_LastNonSpaceCh = 46;
  100.    id_RemoveLastCh = 47;
  101.    id_SetCh = 48;
  102.    id_FromBoolean = 49;
  103.    id_FromByte = 50;
  104.    id_FromChar = 51;
  105.    id_FromDouble = 52;
  106.    id_FromDoubleTrim = 53;
  107.    id_FromExt = 54;
  108.    id_FromExtTrim  = 55;
  109.    id_FromLong = 56;
  110.    id_FromPtr = 57;
  111.    id_FromReal = 58;
  112.    id_FromRealTrim = 59;
  113.    id_FromRGB = 60;
  114.    id_HexFromByte = 61;
  115.    id_HexFromLong = 62;
  116.    id_HexFromPtr = 63;
  117.    id_HexFromWord = 64;
  118.    id_ToBoolean = 65;
  119.    id_ToByte = 66;
  120.    id_ToChar = 67;
  121.    id_ToDouble = 68;
  122.    id_ToExt = 69;
  123.    id_ToInteger = 70;
  124.    id_ToLong = 71;
  125.    id_ToReal = 72;
  126.    id_ToRGB = 73;
  127.    id_ToWord = 74;
  128.    id_AppendStr = 75;
  129.    id_UpperCase = 76;
  130.    id_LowerCase = 77;
  131.    id_CompareStr = 78;
  132.    id_CompareText = 79;
  133.    id_AnsiUpperCase = 80;
  134.    id_AnsiLowerCase = 81;
  135.    id_AnsiCompareStr = 82;
  136.    id_AnsiCompareText = 83;
  137.    id_IsValidIdent = 84;
  138.    id_IntToStr = 85;
  139.    id_IntToHex = 86;
  140.    id_StrToInt = 87;
  141.    id_StrToIntDef = 88;
  142.    id_LoadStr = 89;
  143.    id_FmtLoadStr = 90;
  144.    id_Format = 91;
  145.    id_FloatToStr = 92;
  146.    id_FloatToStrF = 93;
  147.    id_FormatFloat = 94;
  148.    id_StrToFloat = 95;
  149.    id_StrCat = 96;
  150.    id_StrComp = 97;
  151.    id_StrCopy = 98;
  152.    id_StrECopy = 99;
  153.    id_StrEnd = 100;
  154.    id_StrIComp = 101;
  155.    id_StrLCat = 102;
  156.    id_StrLIComp = 103;
  157.    id_StrLComp = 104;
  158.    id_StrLCopy = 105;
  159.    id_StrLen = 106;
  160.    id_StrLower = 107;
  161.    id_StrMove = 108;
  162.    id_StrPas = 109;
  163.    id_StrPCopy = 110;
  164.    id_StrPos = 111;
  165.    id_StrRScan = 112;
  166.    id_StrScan = 113;
  167.    id_StrUpper = 114;
  168.    id_Compare = 115;
  169.    id_CompareI = 116;
  170.    id_CompareL = 117;
  171.    id_CompareLI = 118;
  172.    id_CompareLong = 119;
  173.    id_CompareDouble = 120;
  174.    id_CompareExt = 121;
  175.    id_IsSame = 122;
  176.    id_isSameL = 123;
  177.    id_IsSameLI = 124;
  178.    id_Includes = 125;
  179.    id_Within = 126;
  180.    id_Delete = 127;
  181.    id_Insert = 128;
  182.    id_InsertL = 129;
  183.    id_PadCentre = 130;
  184.    id_PadEnd = 131;
  185.    id_PadFront = 132;
  186.    id_RemoveDIC = 133;
  187.    id_RemoveSIC = 134;
  188.    id_Trim = 135;
  189.    id_TrimEnd = 136;
  190.    id_TrimFront = 137;
  191.    id_TrimZero = 138;
  192.    id_FindCmdLine = 139;
  193.    id_FindCmdLineAndParse = 140;
  194.    id_FindCmdLineParam = 141;
  195.    id_AppendStringRes = 142;
  196.    id_LoadStringRes = 143;
  197.    id_ReadIniKeyword = 144;
  198.    id_WriteIniKeyword = 145;
  199.    id_FindIniSectionKeywords = 146;
  200.    id_AddBackSlash = 147;
  201.    id_BuildPathName = 148;
  202.    id_DefaultExtension = 149;
  203.    id_ExpandFileName = 150;
  204.    id_ForceExtension = 151;
  205.    id_HasBackSlash = 152;
  206.    id_HasDrive = 153;
  207.    id_HasExtension = 154;
  208.    id_HasFileName = 155;
  209.    id_HasDirectory = 156;
  210.    id_DirectoryExists = 157;
  211.    id_DriveExists = 158;
  212.    id_FileExists = 159;
  213.    id_JustExtension = 160;
  214.    id_JustFileName = 161;
  215.    id_JustDirectory = 162;
  216.    id_SetCurDir = 163;
  217.    id_ChCount = 164;
  218.    id_FindBetween2Ch = 165;
  219.    id_FindFirst = 166;
  220.    id_FindFirstCh = 167;
  221.    id_FindLast = 168;
  222.    id_FindLastCh = 169;
  223.    id_FindNext = 170;
  224.    id_FindNextCh = 171;
  225.    id_FindPrev = 172;
  226.    id_FindPrevCh = 173;
  227.    id_SubStrCount = 174;
  228.    id_FirstCharToUpper = 175;
  229.    id_IsAlphaNumeric = 176;
  230.    id_ToLower = 177;
  231.    id_ToUpper = 178;
  232.    id_ReplaceAll = 179;
  233.    id_ReplaceFirst = 180;
  234.    id_ReplaceLast = 181;
  235.    id_ReplaceChAll = 182;
  236.    id_ReplaceChFirst = 183;
  237.    id_ReplaceChLast = 184;
  238.    id_FirstParseDelim = 185;
  239.    id_NextParseDelim = 186;
  240.    id_ParseDelimCount = 187;
  241.    id_ParseDelimToList = 188;
  242.    id_ParsePosToList = 189;
  243.    id_SameI          = 190;
  244.    id_JustName       = 191;
  245.    id_FileSplit      = 192;
  246.    id_FindCurrentDir = 193;
  247.  
  248. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  249.  
  250. TYPE
  251.  
  252.    PFunctionRecord = ^TFunctionRecord;
  253.    TFunctionRecord = RECORD
  254.       Id   : WORD;
  255.       Name : PChar;
  256.    END;
  257.  
  258. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  259.  
  260. procedure TSCTestBed.Button1Click(Sender: TObject);
  261. begin
  262.    Close;
  263. end;
  264.  
  265. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  266.  
  267. procedure TSCTestBed.FormCreate(Sender: TObject);
  268. begin
  269.    { create container to hold id/func name recs }
  270.    TheFuncList := TRecordContainer.Create(SIZEOF(TFunctionRecord));
  271.    SetupFuncLb;
  272.    { clear memo control }
  273. end;
  274.  
  275. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  276.  
  277. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  278.  
  279. procedure TSCTestBed.FormClose(Sender: TObject; var Action: TCloseAction);
  280.  
  281.    { ++++++++++++++++++++++++++++++++++++++++++++++++++ }
  282.  
  283.    PROCEDURE KillStr(R : PFunctionRecord); FAR;
  284.    BEGIN
  285.       StrDispose(R^.Name);
  286.    END;
  287.  
  288.    { ++++++++++++++++++++++++++++++++++++++++++++++++++ }
  289.  
  290. begin
  291.    TheFuncList.ForEach(@KillStr);
  292.    TheFuncList.Free;
  293. end;
  294.  
  295. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  296.  
  297. PROCEDURE TScTestbed.SetupFuncLb;
  298. VAR
  299.    SObj : TStringClass;
  300.  
  301.    { ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  302.  
  303.    PROCEDURE AddItem(id : INTEGER; AStr : PChar);
  304.    VAR
  305.       R : PFunctionRecord;
  306.    BEGIN
  307.       FuncLb.Items.Add(StrPas(AStr));
  308.       NEW(R);
  309.       R^.Id := id;
  310.       R^.Name := StrNew(AStr);
  311.       TheFuncList.Add(R);
  312.    END;
  313.  
  314.    { ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  315.  
  316. BEGIN
  317.    SObj := TSTringClass.Create;
  318.    AddItem(id_Create,'CONSTRUCTOR Create');
  319.    AddItem(id_CreateSize,'CONSTRUCTOR CreateSize(AMaxSize: WORD)');
  320.    AddItem(id_CreateString,'CONSTRUCTOR CreateString(CONST Args : ARRAY OF CONST)');
  321.    AddItem(id_CreateStringNL,'CONSTRUCTOR CreateStringNL(CONST Args : ARRAY OF CONST)');
  322.    AddItem(id_CreateBoolean,'CONSTRUCTOR CreateBoolean(B : BOOLEAN; StrType : INTEGER)');
  323.    AddItem(id_Destroy,'DESTRUCTOR Destroy');
  324.    AddItem(id_Copy,'FUNCTION Copy : POINTER; VIRTUAL');
  325.    AddItem(id_CopyFrom,'PROCEDURE CopyFrom(Source : TStringClass)');
  326.    AddItem(id_Clear,'PROCEDURE Clear');
  327.    AddItem(id_Empty,'PROCEDURE Empty');
  328.    AddItem(id_Assign,'FUNCTION Assign(CONST Args : ARRAY OF CONST) : PChar');
  329.    AddItem(id_AssignFrom,'FUNCTION AssignFrom(CONST Args : ARRAY OF CONST; Start : WORD) : PChar');
  330.    AddItem(id_AssignLen,'FUNCTION AssignLen(CONST Args : ARRAY OF CONST; Len : WORD) : PChar;');
  331.    AddItem(id_AssignMid,'FUNCTION AssignMid(CONST Args : ARRAY OF CONST; Start,Count : WORD) : PChar');
  332.    AddItem(id_AssignNL,'FUNCTION AssignNL(CONST Args : ARRAY OF CONST) : PChar');
  333.    AddItem(id_AssignPad,'FUNCTION AssignPad(CONST Args : ARRAY OF CONST; Len : WORD; ACh : CHAR) : PChar');
  334.    AddItem(id_AssignRight,'FUNCTION AssignRight(CONST Args : ARRAY OF CONST; Len : WORD) : PChar;');
  335.    AddItem(id_AssignTrim,'FUNCTION AssignTrim(CONST Args : ARRAY OF CONST) : PChar;');
  336.    AddItem(id_Append,'FUNCTION Append(CONST Args : ARRAY OF CONST) : PChar;');
  337.    AddItem(id_AppendBoolean,'FUNCTION AppendBoolean(B : BOOLEAN; bt : INTEGER) : PChar;');
  338.    AddItem(id_AppendByte,'FUNCTION AppendByte(B : BYTE) : PChar;');
  339.    AddItem(id_AppendCh,'FUNCTION AppendCh(C : CHAR) : PChar;');
  340.    AddItem(id_AppendDIC,'FUNCTION AppendDIC(CONST Args : ARRAY OF CONST) : PChar;');
  341.    AddItem(id_AppendDouble,'FUNCTION AppendDouble(D : DOUBLE; Width,Places : BYTE) : PChar;');
  342.    AddItem(id_AppendDoubleTrim,'FUNCTION AppendDoubleTrim(D : DOUBLE) : PChar;');
  343.    AddItem(id_AppendExt,'FUNCTION AppendExt(E : EXTENDED; Width,Places : BYTE) : PChar;');
  344.    AddItem(id_AppendExtTrim,'FUNCTION AppendExtTrim(E : EXTENDED) : PChar;');
  345.    AddItem(id_AppendLen,'FUNCTION AppendLen(CONST Args : ARRAY OF CONST; Len : WORD) : PChar;');
  346.    AddItem(id_AppendLong,'FUNCTION AppendLong(L : LONGINT) : PChar;');
  347.    AddItem(id_AppendMid,'FUNCTION AppendMid(CONST Args : ARRAY OF CONST; Start,Count : WORD) : PChar;');
  348.    AddItem(id_AppendNL,'FUNCTION AppendNL(CONST Args : ARRAY OF CONST) : PChar;');
  349.    AddItem(id_AppendPad,'FUNCTION AppendPad(CONST Args : ARRAY OF CONST; Len : WORD; ACh : CHAR) : PChar;');
  350.    AddItem(id_AppendPtr,'FUNCTION AppendPtr(P : POINTER) : PChar;');
  351.    AddItem(id_AppendReal,'FUNCTION AppendReal(R : REAL; Width,Places : BYTE) : PChar;');
  352.    AddItem(id_AppendRight,'FUNCTION AppendRight(CONST Args : ARRAY OF CONST; Len : WORD) : PChar;');
  353.    AddItem(id_AppendSIC,'FUNCTION AppendSIC(CONST Args : ARRAY OF CONST) : PChar;');
  354.    AddItem(id_AppendTrim,'FUNCTION AppendTrim(CONST Args : ARRAY OF CONST) : PChar;');
  355.    AddItem(id_AppendWithTab,'FUNCTION AppendWithTab(CONST Args : ARRAY OF CONST) : PChar;');
  356.    AddItem(id_NLAppend,'FUNCTION NLAppend(CONST Args : ARRAY OF CONST) : PChar;');
  357.    AddItem(id_Prepend,'FUNCTION Prepend(CONST Args : ARRAY OF CONST) : PChar;');
  358.    AddItem(id_FirstNonSpaceCh,'FUNCTION FirstNonSpaceCh(VAR ACh : CHAR) : WORD;');
  359.    AddItem(id_HasCh,'FUNCTION HasCh(ACh : CHAR; VAR Pos : WORD) : BOOLEAN;');
  360.    AddItem(id_isCh,'FUNCTION IsCh(W : WORD; ACh : CHAR) : BOOLEAN;');
  361.    AddItem(id_IsFirstCh,'FUNCTION IsFirstCh(ACh : CHAR) : BOOLEAN;');
  362.    AddItem(id_IsLastCh,'FUNCTION IsLastCh(ACh : CHAR) : BOOLEAN;');
  363.    AddItem(id_LastNonSpaceCh,'FUNCTION LastNonSpaceCh(VAR ACh : CHAR) : WORD;');
  364.    AddItem(id_RemoveLastCh,'PROCEDURE RemoveLastCh');
  365.    AddItem(id_SetCh,'PROCEDURE SetCh(W : WORD; ACh : CHAR');
  366.    { *** WITH OTHER DATA TYPES *** }
  367.    AddItem(id_FromBoolean,'FUNCTION FromBoolean(B : BOOLEAN; bt : INTEGER) : PChar;');
  368.    AddItem(id_FromByte,'FUNCTION FromByte(B : BYTE) : PChar;');
  369.    AddItem(id_FromChar,'FUNCTION FromChar(C : CHAR) : PChar;');
  370.    AddItem(id_FromDouble,'FUNCTION FromDouble(D : DOUBLE; Width,Places : BYTE) : PChar;');
  371.    AddItem(id_FromDoubleTrim,'FUNCTION FromDoubleTrim(D : DOUBLE) : PChar;');
  372.    AddItem(id_FromExt,'FUNCTION FromExt(E : EXTENDED; Width,Places : BYTE) : PChar;');
  373.    AddItem(id_FromExtTrim,'FUNCTION FromExtTrim(E : EXTENDED) : PChar;');
  374.    AddItem(id_FromLong,'FUNCTION FromLong(L : LONGINT) : PChar;');
  375.    AddItem(id_FromPtr,'FUNCTION FromPtr(P : POINTER) : PChar;');
  376.    AddItem(id_FromReal,'FUNCTION FromReal(R : REAL; Width,Places : BYTE) : PChar;');
  377.    AddItem(id_FromRealTrim,'FUNCTION FromRealTrim(R : REAL) : PChar;');
  378.    AddItem(id_FromRGB,'FUNCTION FromRGB(C : TColorRef) : PChar;');
  379.    AddItem(id_HexFromByte,'FUNCTION HexFromByte(B : BYTE) : PChar;');
  380.    AddItem(id_HexFromLong,'FUNCTION HexFromLong(L : LONGINT) : PChar;');
  381.    AddItem(id_HexFromPtr,'FUNCTION HexFromPtr(P : POINTER) : PChar;');
  382.    AddItem(id_HexFromWord,'FUNCTION HexFromWord(W : WORD) : PChar;');
  383.    AddItem(id_ToBoolean,'FUNCTION ToBoolean(VAR B : BOOLEAN) : BOOLEAN;');
  384.    AddItem(id_ToByte,'FUNCTION ToByte(VAR B : BYTE) : BOOLEAN;');
  385.    AddItem(id_ToChar,'FUNCTION ToChar(VAR C : CHAR) : BOOLEAN;');
  386.    AddItem(id_ToDouble,'FUNCTION ToDouble(VAR D : DOUBLE) : BOOLEAN;');
  387.    AddItem(id_ToExt,'FUNCTION ToExt(VAR E : EXTENDED) : BOOLEAN;');
  388.    AddItem(id_ToInteger,'FUNCTION ToInteger(VAR I : INTEGER) : BOOLEAN;');
  389.    AddItem(id_ToLong,'FUNCTION ToLong(VAR L : LONGINT) : BOOLEAN;');
  390.    AddItem(id_ToReal,'FUNCTION ToReal(VAR R : REAL) : BOOLEAN;');
  391.    AddItem(id_ToRGB,'FUNCTION ToRGB(VAR C : TColorRef) : BOOLEAN;');
  392.    AddItem(id_ToWord,'FUNCTION ToWord(VAR W : WORD) : BOOLEAN;');
  393.    AddItem(id_AppendStr,'FUNCTION AppendStr(CONST S: string) : PChar;');
  394.    AddItem(id_UpperCase,'FUNCTION UpperCase(CONST S: string) : PChar;');
  395.    AddItem(id_LowerCase,'FUNCTION LowerCase(const S: string): PChar;');
  396.    AddItem(id_CompareStr,'FUNCTION CompareStr(CONST S2: STRING): Integer;');
  397.    AddItem(id_CompareText,'FUNCTION CompareText(CONST S2: STRING): Integer;');
  398.    AddItem(id_AnsiUpperCase,'FUNCTION AnsiUpperCase(CONST S : STRING) : PChar;');
  399.    AddItem(id_AnsiLowerCase,'FUNCTION AnsiLowerCase(CONST S : STRING) : PChar;');
  400.    AddItem(id_AnsiCompareStr,'FUNCTION AnsiCompareStr(CONST S2: STRING): Integer;');
  401.    AddItem(id_AnsiCompareText,'FUNCTION AnsiCompareText(CONST S2: STRING): Integer;');
  402.    AddItem(id_IsValidIdent,'FUNCTION IsValidIdent: Boolean;');
  403.    AddItem(id_IntToStr,'FUNCTION IntToStr(Value: Longint): PChar;');
  404.    AddItem(id_IntToHex,'FUNCTION IntToHex(Value: Longint; Digits: Integer): PChar;');
  405.    AddItem(id_StrToInt,'FUNCTION StrToInt : Longint;');
  406.    AddItem(id_StrToIntDef,'FUNCTION StrToIntDef(Default: Longint): Longint;');
  407.    AddItem(id_LoadStr,'FUNCTION LoadStr(Ident: Word): PChar;');
  408.    AddItem(id_FmtLoadStr,'FUNCTION FmtLoadStr(Ident: Word; CONST Args: ARRAY OF CONST): PChar;');
  409.    AddItem(id_Format,'FUNCTION Format(CONST Format: STRING; CONST Args: ARRAY OF CONST): PChar;');
  410.    AddItem(id_FloatToStr,'FUNCTION FloatToStr(Value: Extended): PChar;');
  411.    AddItem(id_FloatToStrF,'FUNCTION FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): PChar;');
  412.    AddItem(id_FormatFloat,'FUNCTION FormatFloat(const Format: STRING; Value: Extended): PChar;');
  413.    AddItem(id_StrToFloat,'FUNCTION StrToFloat : Extended;');
  414.    AddItem(id_StrCat,'FUNCTION StrCat(Source : PChar) : PChar;');
  415.    AddItem(id_StrComp,'FUNCTION StrComp(Str2 : PChar) : INTEGER;');
  416.    AddItem(id_StrCopy,'FUNCTION StrCopy(Source : PChar) : PChar;');
  417.    AddItem(id_StrECopy,'FUNCTION StrECopy(Source : PChar) : PChar;');
  418.    AddItem(id_StrEnd,'FUNCTION StrEnd : PChar;');
  419.    AddItem(id_StrIComp,'FUNCTION StrIComp(Str2 : PChar) : INTEGER;');
  420.    AddItem(id_StrLCat,'FUNCTION StrLCat(Source : PChar; MaxLen : WORD) : PChar;');
  421.    AddItem(id_StrLIComp,'FUNCTION StrLIComp(Str2 : PChar; MaxLen : WORD) : INTEGER;');
  422.    AddItem(id_StrLComp,'FUNCTION StrLComp(Str2 : PChar; MaxLen : WORD) : INTEGER;');
  423.    AddItem(id_StrLCopy,'FUNCTION StrLCopy(Str2 : PChar; MaxLen : WORD) : INTEGER;');
  424.    AddItem(id_StrLen,'FUNCTION StrLen : WORD;');
  425.    AddItem(id_StrLower,'FUNCTION StrLower : PChar;');
  426.    AddItem(id_StrMove,'FUNCTION StrMove(Source : PChar; Count : WORD) : PChar;');
  427.    AddItem(id_StrPas,'FUNCTION StrPas : STRING;');
  428.    AddItem(id_StrPCopy,'FUNCTION StrPCopy(Source : STRING) : PChar;');
  429.    AddItem(id_StrPos,'FUNCTION StrPos(Str2 : PChar) : PChar;');
  430.    AddItem(id_StrRScan,'FUNCTION StrRScan(Chr : CHAR) : PChar;');
  431.    AddItem(id_StrScan,'FUNCTION StrScan(Chr : CHAR) : PChar;');
  432.    AddItem(id_StrUpper,'FUNCTION StrUpper : PChar;');
  433.    AddItem(id_Compare,'FUNCTION Compare(CONST Args : ARRAY OF CONST) : INTEGER;');
  434.    AddItem(id_CompareI,'FUNCTION CompareI(CONST Args : ARRAY OF CONST) : INTEGER;');
  435.    AddItem(id_CompareL,'FUNCTION CompareL(CONST Args : ARRAY OF CONST; Len : WORD) : INTEGER;');
  436.    AddItem(id_CompareLI,'FUNCTION CompareLI(CONST Args : ARRAY OF CONST; Len : WORD) : INTEGER;');
  437.    AddItem(id_CompareLong,'FUNCTION CompareLong(L : LONGINT) : INTEGER;');
  438.    AddItem(id_CompareDouble,'FUNCTION CompareDouble(D : DOUBLE) : INTEGER;');
  439.    AddItem(id_CompareExt,'FUNCTION CompareExt(D : DOUBLE) : INTEGER;');
  440.    AddItem(id_IsSame,'FUNCTION IsSame(CONST Args : ARRAY OF CONST) : BOOLEAN;');
  441.    AddItem(id_isSameL,'FUNCTION IsSameL(CONST Args : ARRAY OF CONST; Len : WORD) : BOOLEAN;');
  442.    AddItem(id_IsSameLI,'FUNCTION IsSameLI(CONST Args : ARRAY OF CONST; Len : WORD) : BOOLEAN;');
  443.    AddItem(id_Includes,'FUNCTION Includes(CONST Args : ARRAY OF CONST) : BOOLEAN;');
  444.    AddItem(id_Within,'FUNCTION Within(CONST Args : ARRAY OF CONST) : BOOLEAN;');
  445.    AddItem(id_Delete,'FUNCTION Delete(Index,Count : WORD) : PChar;');
  446.    AddItem(id_Insert,'FUNCTION Insert(CONST Args : ARRAY OF CONST; Index : WORD) : PChar;');
  447.    AddItem(id_InsertL,'FUNCTION InsertL(CONST Args : ARRAY OF CONST; Len,Index : WORD) : PChar;');
  448.    AddItem(id_PadCentre,'FUNCTION PadCentre(NewLen : WORD; ACh : CHAR) : PChar;');
  449.    AddItem(id_PadEnd,'FUNCTION PadEnd(NewLen : WORD; ACh : CHAR) : PChar;');
  450.    AddItem(id_PadFront,'FUNCTION PadFront(NewLen : WORD; ACh : CHAR) : PChar;');
  451.    AddItem(id_RemoveDIC,'FUNCTION RemoveDIC : PChar;');
  452.    AddItem(id_RemoveSIC,'FUNCTION RemoveSIC : PChar;');
  453.    AddItem(id_Trim,'FUNCTION Trim : PChar;');
  454.    AddItem(id_TrimEnd,'FUNCTION TrimEnd : PChar;');
  455.    AddItem(id_TrimFront,'FUNCTION TrimFront : PChar;');
  456.    AddItem(id_TrimZero,'FUNCTION TrimZero : PChar;');
  457.    AddItem(id_FindCmdLine,'FUNCTION FindCmdLine : PChar;');
  458.    AddItem(id_FindCmdLineAndParse,
  459.            'FUNCTION FindCmdLineAndParse(IncExeParam : BOOLEAN;VAR AList   : TObjectContainer) : PChar');
  460.    AddItem(id_FindCmdLineParam,'FUNCTION FindCmdLineParam(Idx : INTEGER) : PChar;');
  461.    AddItem(id_AppendStringRes,'FUNCTION AppendStringRes(Instance : THandle; Id : WORD) : PChar;');
  462.    AddItem(id_LoadStringRes,'FUNCTION LoadStringRes(Instance : THandle; Id : WORD) : PChar;');
  463.    AddItem(id_ReadIniKeyword,
  464.            'FUNCTION ReadIniKeyword(CONST IniFileArgs,SectionArgs,KeyWordArgs : ARRAY OF CONST) : WORD;');
  465.    AddItem(id_WriteIniKeyword,'FUNCTION WriteIniKeyword(CONST IniFileArgs,SectionArgs,KeyWordArgs : ARRAY OF CONST) : WORD;');
  466.    AddItem(id_FindIniSectionKeywords,
  467.  'FUNCTION FindIniSectionKeywords(CONST IniFileArgs,SectionArgs  : ARRAY OF CONST; VAR AList : TObjectContainer) : WORD;');
  468.    AddItem(id_AddBackSlash,'FUNCTION AddBackSlash : PChar;');
  469.    AddItem(id_BuildPathName,'FUNCTION BuildPathName(CONST DirArgs,FileNameArgs,ExtArgs : ARRAY OF CONST) : PChar;');
  470.    AddItem(id_DefaultExtension,'FUNCTION DefaultExtension(CONST Args : ARRAY OF CONST) : PChar;');
  471.    AddItem(id_ExpandFileName,'FUNCTION ExpandFileName : PChar;');
  472.    AddItem(id_FindCurrentDir,'FUNCTION FindCurrentDir : PChar;');
  473.    AddItem(id_ForceExtension,'FUNCTION ForceExtension(CONST Args : ARRAY OF CONST) : PChar;');
  474.    AddItem(id_HasBackSlash,'FUNCTION HasBackSlash : BOOLEAN;');
  475.    AddItem(id_HasDrive,'FUNCTION HasDrive : BOOLEAN;');
  476.    AddItem(id_HasExtension,'FUNCTION HasExtension(VAR DotPos : WORD) : BOOLEAN;');
  477.    AddItem(id_HasFileName,'FUNCTION HasFileName : BOOLEAN;');
  478.    AddItem(id_HasDirectory,'FUNCTION HasDirectory : BOOLEAN;');
  479.    AddItem(id_DirectoryExists,'FUNCTION DirectoryExists : BOOLEAN;');
  480.    AddItem(id_DriveExists,'FUNCTION DriveExists : BOOLEAN;');
  481.    AddItem(id_FileExists,'FUNCTION FileExists : BOOLEAN;');
  482.    AddItem(id_FileSplit,'FUNCTION FileSplit(VAR ADirObj,ANameObj,AnExtObj : TStringClass) : WORD;');
  483.    AddItem(id_JustExtension,'FUNCTION JustExtension(CONST Args : ARRAY OF CONST) : PChar;');
  484.    AddItem(id_JustFileName,'FUNCTION JustFileName(CONST Args : ARRAY OF CONST) : PChar;');
  485.    AddItem(id_JustName,'FUNCTION JustName(CONST Args : ARRAY OF CONST) : PChar;');
  486.    AddItem(id_JustDirectory,'FUNCTION JustDirectory(CONST Args : ARRAY OF CONST) : PChar;');
  487.    AddItem(id_SetCurDir,'FUNCTION SetCurDir : BOOLEAN;');
  488.    AddItem(id_ChCount,'FUNCTION ChCount(ACh : CHAR) : WORD;');
  489.    SObj.Assign(['FUNCTION FindBetween2Ch(FCh,SCh : CHAR; Start : WORD; ',
  490.                 'VAR SubStart,SubrLen : WORD; Cut,IncDelims : BOOLEAN;',
  491.                 'VAR ASubStr : TStringClass) : BOOLEAN;']);
  492.    AddItem(id_FindBetween2Ch,SObj.ZString);
  493.    AddItem(id_FindFirst,
  494.           'FUNCTION FindFirst(CONST SubArgs : ARRAY OF CONST; VAR P : WORD) : BOOLEAN;');
  495.    AddItem(id_FindFirstCh,'FUNCTION FindFirstCh(ACh : CHAR; VAR P : WORD) : BOOLEAN;');
  496.    AddItem(id_FindLast,'FUNCTION FindLast(CONST SubArgs : ARRAY OF CONST; VAR P : WORD) : BOOLEAN;');
  497.    AddItem(id_FindLastCh,'FUNCTION FindLastCh(ACh : CHAR; VAR P : WORD) : BOOLEAN;');
  498.    AddItem(id_FindNext,'FUNCTION FindNext(CONST SubArgs : ARRAY OF CONST; StartPos : WORD; VAR NextPos : WORD) : BOOLEAN;');
  499.    AddItem(id_FindNextCh,'FUNCTION FindNextCh(ACh : CHAR; StartPos : WORD; VAR NextPos : WORD) : BOOLEAN;');
  500.    AddItem(id_FindPrev,'FUNCTION FindPrev(CONST SubArgs : ARRAY OF CONST; StartPos : WORD; VAR PrevPos : WORD) : BOOLEAN;');
  501.    AddItem(id_FindPrevCh,'FUNCTION FindPrevCh(ACh : CHAR; StartPos : WORD; VAR PrevPos : WORD) : BOOLEAN;');
  502.    AddItem(id_SubStrCount,'FUNCTION SubStrCount(CONST SubArgs : ARRAY OF CONST) : WORD;');
  503.    AddItem(id_FirstCharToUpper,'FUNCTION FirstCharToUpper : PChar;');
  504.    AddItem(id_IsAlphaNumeric,'FUNCTION IsAlphaNumeric : BOOLEAN;');
  505.    AddItem(id_ToLower,'FUNCTION ToLower : PChar;');
  506.    AddItem(id_ToUpper,'FUNCTION ToUpper : PChar;');
  507.    AddItem(id_ReplaceAll,'FUNCTION ReplaceAll(CONST OldArgs,NewArgs : ARRAY OF CONST) : PChar;');
  508.    AddItem(id_ReplaceFirst,'FUNCTION ReplaceFirst(CONST OldArgs,NewArgs : ARRAY OF CONST) : PChar;');
  509.    AddItem(id_ReplaceLast,'FUNCTION ReplaceLast(CONST OldArgs,NewArgs : ARRAY OF CONST) : PChar;');
  510.    AddItem(id_ReplaceChAll,'FUNCTION ReplaceChAll(OldCh,NewCh : CHAR) : PChar;');
  511.    AddItem(id_ReplaceChFirst,'FUNCTION ReplaceChFirst(OldCh,NewCh : CHAR) : PChar;');
  512.    AddItem(id_ReplaceChLast,'FUNCTION ReplaceChLast(OldCh,NewCh : CHAR) : PChar;');
  513.    AddItem(id_FirstParseDelim,
  514.    'FUNCTION FirstParseDelim(CONST Args : ARRAY OF CONST; DelimCh : CHAR; VAR DelimPos : WORD) : BOOLEAN;');
  515.    SObj.Assign(['FUNCTION NextParseDelim(CONST Args : ARRAY OF CONST; DelimCh : CHAR; ',
  516.                 'StartPos : WORD; VAR NextDelimPos : WORD) : BOOLEAN;']);
  517.    AddItem(id_NextParseDelim,SObj.ZString);
  518.    AddItem(id_ParseDelimCount,'FUNCTION ParseDelimCount(DelimCh : CHAR) : WORD;');
  519.    AddItem(id_ParseDelimToList,
  520.     'FUNCTION ParseDelimToList(DelimCh : CHAR; Special : INTEGER; VAR AList : TObjectContainer) : WORD;');
  521.    AddItem(id_ParsePosToList,'FUNCTION ParsePosToList(VAR PosArray; PosCt : WORD; VAR AList : TObjectContainer) : WORD;');
  522.    { remove any sel }
  523.    FuncLb.ItemIndex := -1;
  524.    { end }
  525.    SObj.Free;
  526. END;
  527.  
  528. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  529.  
  530. procedure TSCTestBed.FuncLbClick(Sender: TObject);
  531. CONST
  532.    MaxLen = 500;
  533. VAR
  534.    AStr : PChar;
  535.    AnItem : PFunctionRecord;
  536.  
  537.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  538.  
  539.    FUNCTION MatchStr(R : PFunctionRecord) : BOOLEAN; FAR;
  540.    BEGIN
  541.       MatchStr := (SafeStrIComp(AStr,R^.Name) = 0);
  542.    END;
  543.  
  544.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  545.  
  546. begin
  547.    GetMem(AStr,Maxlen);
  548.    StrPCopy(AStr,FuncLb.Items.Strings[FuncLb.ItemIndex]);
  549.    AnItem := TheFuncList.FirstThat(@MatchStr);
  550.    IF AnItem <> NIL THEN
  551.       RunTest(AnItem^.Id);
  552.    FreeMem(AStr,Maxlen);
  553.  
  554. end;
  555.  
  556. { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  557.  
  558. PROCEDURE TScTestBed.RunTest(fid : WORD);
  559. CONST
  560.    ANullPChar : PChar = NIL;
  561.    APChar : PChar = 'PChar string';
  562.    AStr : STRING = 'Pascal string';
  563.    ANullStr : STRING = '';
  564.    ALong : LONGINT = 99000;
  565.    APath : STRING = 'c:\windows\system.ini';
  566.    AReal : REAL = 21.3;
  567.    AnInteger : INTEGER = -5;
  568.    AWord : WORD = 66;
  569.    ADouble : DOUBLE = 66.4;
  570.    AByte : BYTE = 124;
  571.    AnExt : EXTENDED = 134.456;
  572.  
  573. VAR
  574.    ANullStrObj,AStrObj : TStringClass;
  575.  
  576.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  577.  
  578.    PROCEDURE DoCreate;
  579.    BEGIN
  580.       Writeln('Instantiates an object with null string and zero buffer length');
  581.       Writeln('e.g. AStrObj := TStringClass.Create');
  582.    END;
  583.  
  584.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  585.  
  586.    PROCEDURE DoCreateSize;
  587.    BEGIN
  588.       Writeln('Instantiates an object with a null string but with a buffer');
  589.       Writeln(' size preset to ''ASize'' bytes. Useful for situations ');
  590.       Writeln('where lots of assigns/appends are anticipated.');
  591.       Writeln('e.g. AStrObj := TStringClass.CreateSize(2000)');
  592.    END;
  593.  
  594.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  595.  
  596.    PROCEDURE DoCreateString;
  597.    VAR
  598.       TObj : TStringClass;
  599.    BEGIN
  600.       Writeln('Code:');
  601.       Writeln('TObj := TStringClass.CreateString([AStr,''.'',APChar,''.'',ANullPChar,''.'']);');
  602.       TObj := TStringClass.CreateString([AStr,'.',APChar,'.',ANullPChar,'.']);
  603.       Writeln;
  604.       Writeln('Result:');
  605.       Writeln(TObj.ZString);
  606.       TObj.Free;
  607.    END;
  608.  
  609.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  610.  
  611.    PROCEDURE DoCreateStringNL;
  612.    VAR
  613.       TObj : TStringClass;
  614.    BEGIN
  615.       Writeln('Code:');
  616.       Writeln('TObj := TStringClass.CreateStringNL([AStr]);');
  617.       Writeln('TObj.Append([APChar]);');
  618.       TObj := TStringClass.CreateStringNL([AStr]);
  619.       TObj.Append([APChar]);
  620.       Writeln;
  621.       Writeln('Result:');
  622.       Writeln(TObj.ZString);
  623.       TObj.Free;
  624.    END;
  625.  
  626.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  627.  
  628.    PROCEDURE DoCreateBoolean;
  629.    VAR
  630.       TObj : TStringClass;
  631.    BEGIN
  632.       Writeln('Code:');
  633.       Writeln('TObj := TStringClass.CreateBoolean(TRUE,bt_NoYes);');
  634.       TObj := TStringClass.CreateBoolean(TRUE,bt_NoYes);
  635.       Writeln;
  636.       Writeln('Result:');
  637.       Writeln(TObj.ZString);
  638.       TObj.Free;
  639.    END;
  640.  
  641.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  642.  
  643.    PROCEDURE DoDestroy;
  644.    BEGIN
  645.       Writeln('Disposes the string class object.');
  646.       Writeln('Do not call directly. Use the Free metheod');
  647.    END;
  648.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  649.  
  650.    PROCEDURE DoCopy;
  651.    VAR
  652.       TObj,CObj : TStringClass;
  653.    BEGIN
  654.       Writeln('Code:');
  655.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  656.       Writeln('CObj := TObj.Copy;');
  657.       TObj := TStringClass.CreateString([AStr]);
  658.       CObj := TObj.Copy;
  659.       Writeln;
  660.       Writeln('Result:');
  661.       Writeln('Original string object text = ',TObj.ZString);
  662.       Writeln('Copy string object text     = ',CObj.ZString);
  663.       TObj.Free;
  664.       CObj.Free;
  665.    END;
  666.  
  667.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  668.  
  669.    PROCEDURE DoCopyFrom;
  670.    VAR
  671.       TObj,CObj : TStringClass;
  672.    BEGIN
  673.       Writeln('Code:');
  674.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  675.       Writeln('CObj := TStringClass.Create;');
  676.       Writeln('CObj.CopyFrom(TObj);');
  677.       TObj := TStringClass.CreateString([AStr]);
  678.       CObj := TStringClass.Create;
  679.       CObj.CopyFrom(TObj);
  680.       Writeln;
  681.       Writeln('Result:');
  682.       Writeln('Original string object text = ',TObj.ZString);
  683.       Writeln('Copy string object text     = ',CObj.ZString);
  684.       TObj.Free;
  685.       CObj.Free;
  686.    END;
  687.  
  688.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  689.  
  690.    PROCEDURE DoClear;
  691.    VAR
  692.       TObj : TStringClass;
  693.    BEGIN
  694.       Writeln('Code:');
  695.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  696.       Writeln('TObj.Clear;');
  697.       TObj := TStringClass.CreateString([AStr]);
  698.       Writeln;
  699.       Writeln('Result pre clear :');
  700.       Writeln(TObj.ZString,'(Buffer Size = ',TObj.MaxSize,')');
  701.       TObj.Clear;
  702.       Writeln;
  703.       Writeln('Result post clear :');
  704.       Writeln(TObj.ZString,'(Buffer Size = ',TObj.MaxSize,')');
  705.       Writeln;
  706.       TObj.Free;
  707.    END;
  708.  
  709.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  710.  
  711.    PROCEDURE DoEmpty;
  712.    VAR
  713.       TObj : TStringClass;
  714.    BEGIN
  715.       Writeln('Code:');
  716.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  717.       Writeln('TObj.Empty;');
  718.       TObj := TStringClass.CreateString([AStr]);
  719.       Writeln;
  720.       Writeln('Result pre Empty :');
  721.       Writeln(TObj.ZString,'(Buffer Size = ',TObj.MaxSize,')');
  722.       TObj.Empty;
  723.       Writeln;
  724.       Writeln('Result post Empty :');
  725.       Writeln(TObj.ZString,'(Buffer Size = ',TObj.MaxSize,')');
  726.       Writeln;
  727.       TObj.Free;
  728.    END;
  729.  
  730.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  731.  
  732.    PROCEDURE DoAssign;
  733.    VAR
  734.       TObj : TStringClass;
  735.    BEGIN
  736.       Writeln('Code:');
  737.       Writeln('TObj := TStringClass.Create;');
  738.       Writeln('TObj.Assign([AStr,'' and '',APChar,'' '',ALong]);');
  739.       TObj := TStringClass.Create;
  740.       TObj.Assign([AStr,' and ',APChar,' ',ALong]);
  741.       Writeln;
  742.       Writeln('Result:');
  743.       Writeln(TObj.ZString);
  744.       TObj.Free;
  745.    END;
  746.  
  747.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  748.  
  749.    PROCEDURE DoAssignFrom;
  750.    VAR
  751.       TObj : TStringClass;
  752.    BEGIN
  753.       Writeln('Code:');
  754.       Writeln('TObj := TStringClass.Create;');
  755.       Writeln('TObj.AssignFrom([AStr,'' and '',APChar,'' '',ALong],7);');
  756.       TObj := TStringClass.Create;
  757.       TObj.AssignFrom([AStr,' and ',APChar,' ',ALong],7);
  758.       Writeln;
  759.       Writeln('Result:');
  760.       Writeln(TObj.ZString);
  761.       TObj.Free;
  762.    END;
  763.  
  764.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  765.  
  766.    PROCEDURE DoAssignLen;
  767.    VAR
  768.       TObj : TStringClass;
  769.    BEGIN
  770.       Writeln('Code:');
  771.       Writeln('TObj := TStringClass.Create;');
  772.       Writeln('TObj.AssignLen([AStr,'' and '',APChar,'' '',ALong],9);');
  773.       TObj := TStringClass.Create;
  774.       TObj.AssignLen([AStr,' and ',APChar,' ',ALong],9);
  775.       Writeln;
  776.       Writeln('Result:');
  777.       Writeln(TObj.ZString);
  778.       TObj.Free;
  779.    END;
  780.  
  781.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  782.  
  783.    PROCEDURE DoAssignMid;
  784.    VAR
  785.       TObj : TStringClass;
  786.    BEGIN
  787.       Writeln('Code:');
  788.       Writeln('TObj := TStringClass.Create;');
  789.       Writeln('TObj.AssignMid([AStr,'' and '',APChar,'' '',ALong],7,5);');
  790.       TObj := TStringClass.Create;
  791.       TObj.AssignMid([AStr,' and ',APChar,' ',ALong],7,5);
  792.       Writeln;
  793.       Writeln('Result:');
  794.       Writeln(TObj.ZString);
  795.       TObj.Free;
  796.    END;
  797.  
  798.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  799.  
  800.    PROCEDURE DoAssignNL;
  801.    VAR
  802.       TObj : TStringClass;
  803.    BEGIN
  804.       Writeln('Code:');
  805.       Writeln('TObj := TStringClass.Create;');
  806.       Writeln('TObj.AssignNL([AStr,'' and '',APChar,'' '',ALong]);');
  807.       Writeln('TObj.Append([AWord]);');
  808.       TObj := TStringClass.Create;
  809.       TObj.AssignNL([AStr,' and ',APChar,' ',ALong]);
  810.       TObj.Append([AWord]);
  811.       Writeln;
  812.       Writeln('Result:');
  813.       Writeln(TObj.ZString);
  814.       TObj.Free;
  815.    END;
  816.  
  817.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  818.  
  819.    PROCEDURE DoAssignPad;
  820.    VAR
  821.       TObj : TStringClass;
  822.    BEGIN
  823.       Writeln('Code:');
  824.       Writeln('TObj := TStringClass.Create;');
  825.       Writeln('TObj.AssignPad([AStr],15,''x'');');
  826.       TObj := TStringClass.Create;
  827.       TObj.AssignPad([AStr],15,'x');
  828.       Writeln;
  829.       Writeln('Result:');
  830.       Writeln(TObj.ZString);
  831.       TObj.Free;
  832.    END;
  833.  
  834.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  835.  
  836.    PROCEDURE DoAssignRight;
  837.    VAR
  838.       TObj : TStringClass;
  839.    BEGIN
  840.       Writeln('Code:');
  841.       Writeln('TObj := TStringClass.Create;');
  842.       Writeln('TObj.AssignRight([AStr],3);');
  843.       TObj := TStringClass.Create;
  844.       TObj.AssignRight([AStr],3);
  845.       Writeln;
  846.       Writeln('Result:');
  847.       Writeln(TObj.ZString);
  848.       TObj.Free;
  849.    END;
  850.  
  851.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  852.  
  853.    PROCEDURE DoAssignTrim;
  854.    VAR
  855.       TObj : TStringClass;
  856.    BEGIN
  857.       Writeln('Code:');
  858.       Writeln('TObj := TStringClass.Create;');
  859.       Writeln('TObj.AssignTrim([''    '',AStr,''   '']);');
  860.       TObj := TStringClass.Create;
  861.       TObj.AssignTrim(['    ',AStr,'   ']);
  862.       Writeln;
  863.       Writeln('Result:');
  864.       Writeln(TObj.ZString);
  865.       TObj.Free;
  866.    END;
  867.  
  868.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  869.  
  870.    PROCEDURE DoAppend;
  871.    VAR
  872.       TObj : TStringClass;
  873.    BEGIN
  874.       Writeln('Code:');
  875.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  876.       Writeln('TObj.Append([APChar,'' '',ADouble]);');
  877.       TObj := TStringClass.CreateString([AStr]);
  878.       TObj.Append([APChar,' ',ADouble]);
  879.       Writeln;
  880.       Writeln('Result:');
  881.       Writeln(TObj.ZString);
  882.       TObj.Free;
  883.    END;
  884.  
  885.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  886.  
  887.    PROCEDURE DoAppendBoolean;
  888.    VAR
  889.       TObj : TStringClass;
  890.    BEGIN
  891.       Writeln('Code:');
  892.       Writeln('TObj := TStringClass.CreateString([AStr,'' = '']);');
  893.       Writeln('TObj.AppendBoolean(FALSE,bt_FalseTrue);');
  894.       TObj := TStringClass.CreateString([AStr,' = ']);
  895.       TObj.AppendBoolean(FALSE,bt_FalseTrue);
  896.       Writeln;
  897.       Writeln('Result:');
  898.       Writeln(TObj.ZString);
  899.       TObj.Free;
  900.    END;
  901.  
  902.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  903.  
  904.    PROCEDURE DoAppendByte;
  905.    VAR
  906.       TObj : TStringClass;
  907.    BEGIN
  908.       Writeln('Code:');
  909.       Writeln('TObj := TStringClass.CreateString([AStr,'' = '']);');
  910.       Writeln('TObj.AppendByte(AByte);');
  911.       TObj := TStringClass.CreateString([AStr,' = ']);
  912.       TObj.AppendByte(AByte);
  913.       Writeln;
  914.       Writeln('Result:');
  915.       Writeln(TObj.ZString);
  916.       TObj.Free;
  917.    END;
  918.  
  919.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  920.  
  921.    PROCEDURE DoAppendCh;
  922.    VAR
  923.       TObj : TStringClass;
  924.    BEGIN
  925.       Writeln('Code:');
  926.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  927.       Writeln('TObj.AppendCh(''*'');');
  928.       TObj := TStringClass.CreateString([AStr]);
  929.       TObj.AppendCh('*');
  930.       Writeln;
  931.       Writeln('Result:');
  932.       Writeln(TObj.ZString);
  933.       TObj.Free;
  934.    END;
  935.  
  936.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  937.  
  938.    PROCEDURE DoAppendDIC;
  939.    VAR
  940.       TObj : TStringClass;
  941.    BEGIN
  942.       Writeln('Code:');
  943.       Writeln('TObj := TStringClass.CreateString([''Call me '']);');
  944.       Writeln('TObj.AppendDIC([''Mr Tibbs'']);');
  945.       TObj := TStringClass.CreateString(['Call me ']);
  946.       TObj.AppendDIC(['Mr Tibbs']);
  947.       Writeln;
  948.       Writeln('Result:');
  949.       Writeln(TObj.ZString);
  950.       TObj.Free;
  951.    END;
  952.  
  953.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  954.  
  955.    PROCEDURE DoAppendDouble;
  956.    VAR
  957.       TObj : TStringClass;
  958.    BEGIN
  959.       Writeln('Code:');
  960.       Writeln('TObj := TStringClass.CreateString([''Value =  '']);');
  961.       Writeln('TObj.AppendDouble(ADouble,10,3);');
  962.       TObj := TStringClass.CreateString(['Value =  ']);
  963.       TObj.AppendDouble(ADouble,10,3);
  964.       Writeln;
  965.       Writeln('Result:');
  966.       Writeln(TObj.ZString);
  967.       TObj.Free;
  968.    END;
  969.  
  970.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  971.  
  972.    PROCEDURE DoAppendDoubleTrim;
  973.    VAR
  974.       TObj : TStringClass;
  975.    BEGIN
  976.       Writeln('Code:');
  977.       Writeln('TObj := TStringClass.CreateString([''Value =  '']);');
  978.       Writeln('TObj.AppendDoubleTrim(ADouble);');
  979.       TObj := TStringClass.CreateString(['Value =  ']);
  980.       TObj.AppendDoubleTrim(ADouble);
  981.       Writeln;
  982.       Writeln('Result:');
  983.       Writeln(TObj.ZString);
  984.       TObj.Free;
  985.    END;
  986.  
  987.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  988.  
  989.    PROCEDURE DoAppendExt;
  990.    VAR
  991.       TObj : TStringClass;
  992.    BEGIN
  993.       Writeln('Code:');
  994.       Writeln('TObj := TStringClass.CreateString([''Value =  '']);');
  995.       Writeln('TObj.AppendExt(AnExt,10,3);');
  996.       TObj := TStringClass.CreateString(['Value =  ']);
  997.       TObj.AppendExt(AnExt,10,3);
  998.       Writeln;
  999.       Writeln('Result:');
  1000.       Writeln(TObj.ZString);
  1001.       TObj.Free;
  1002.    END;
  1003.  
  1004.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1005.  
  1006.    PROCEDURE DoAppendExtTrim;
  1007.    VAR
  1008.       TObj : TStringClass;
  1009.    BEGIN
  1010.       Writeln('Code:');
  1011.       Writeln('TObj := TStringClass.CreateString([''Value =  '']);');
  1012.       Writeln('TObj.AppendExtTrim(AnExt);');
  1013.       TObj := TStringClass.CreateString(['Value =  ']);
  1014.       TObj.AppendExtTrim(AnExt);
  1015.       Writeln;
  1016.       Writeln('Result:');
  1017.       Writeln(TObj.ZString);
  1018.       TObj.Free;
  1019.    END;
  1020.  
  1021.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1022.  
  1023.    PROCEDURE DoAppendLen;
  1024.    VAR
  1025.       TObj : TStringClass;
  1026.    BEGIN
  1027.       Writeln('Code:');
  1028.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1029.       Writeln('TObj.AppendLen([APChar],4);');
  1030.       TObj := TStringClass.CreateString([AStr]);
  1031.       TObj.AppendLen([APChar],4);
  1032.       Writeln;
  1033.       Writeln('Result:');
  1034.       Writeln(TObj.ZString);
  1035.       TObj.Free;
  1036.    END;
  1037.  
  1038.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1039.  
  1040.    PROCEDURE DoAppendLong;
  1041.    VAR
  1042.       TObj : TStringClass;
  1043.    BEGIN
  1044.       Writeln('Code:');
  1045.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1046.       Writeln('TObj.AppendLong(ALong);');
  1047.       TObj := TStringClass.CreateString([AStr]);
  1048.       TObj.AppendLong(ALong);
  1049.       Writeln;
  1050.       Writeln('Result:');
  1051.       Writeln(TObj.ZString);
  1052.       TObj.Free;
  1053.    END;
  1054.  
  1055.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1056.  
  1057.    PROCEDURE DoAppendMid;
  1058.    VAR
  1059.       TObj : TStringClass;
  1060.    BEGIN
  1061.       Writeln('Code:');
  1062.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1063.       Writeln('TObj.AppendMid([APChar],3,2);');
  1064.       TObj := TStringClass.CreateString([AStr]);
  1065.       TObj.AppendMid([APChar],3,2);
  1066.       Writeln;
  1067.       Writeln('Result:');
  1068.       Writeln(TObj.ZString);
  1069.       TObj.Free;
  1070.    END;
  1071.  
  1072.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1073.  
  1074.    PROCEDURE DoAppendNL;
  1075.    VAR
  1076.       TObj : TStringClass;
  1077.    BEGIN
  1078.       Writeln('Code:');
  1079.       Writeln('TObj := TStringClass.Create;');
  1080.       Writeln('TObj.AppendNL([''1st line'']);');
  1081.       Writeln('TObj.Append([''2nd line'']);');
  1082.       TObj := TStringClass.Create;
  1083.       TObj.AppendNL(['1st line']);
  1084.       TObj.Append(['2nd line']);
  1085.       Writeln;
  1086.       Writeln('Result:');
  1087.       Writeln(TObj.ZString);
  1088.       TObj.Free;
  1089.    END;
  1090.  
  1091.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1092.  
  1093.    PROCEDURE DoAppendPad;
  1094.    VAR
  1095.       TObj : TStringClass;
  1096.    BEGIN
  1097.       Writeln('Code:');
  1098.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1099.       Writeln('TObj.AppendPad([APChar],30,''?'');');
  1100.       TObj := TStringClass.CreateString([AStr]);
  1101.       TObj.AppendPad([APChar],30,'?');
  1102.       Writeln;
  1103.       Writeln('Result:');
  1104.       Writeln(TObj.ZString);
  1105.       TObj.Free;
  1106.    END;
  1107.  
  1108.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1109.  
  1110.    PROCEDURE DoAppendPtr;
  1111.    VAR
  1112.       TObj : TStringClass;
  1113.    BEGIN
  1114.       Writeln('Code:');
  1115.       Writeln('TObj := TStringClass.CreateString([''ALong Pointer = '']);');
  1116.       Writeln('TObj.AppendPtr(@ALong);');
  1117.       TObj := TStringClass.CreateString(['ALong Pointer = ']);
  1118.       TObj.AppendPtr(@ALong);
  1119.       Writeln;
  1120.       Writeln('Result:');
  1121.       Writeln(TObj.ZString);
  1122.       TObj.Free;
  1123.    END;
  1124.  
  1125.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1126.  
  1127.    PROCEDURE DoAppendReal;
  1128.    VAR
  1129.       TObj : TStringClass;
  1130.    BEGIN
  1131.       Writeln('Code:');
  1132.       Writeln('TObj := TStringClass.CreateString([''AReal = '']);');
  1133.       Writeln('TObj.AppendReal(AReal,10,2);');
  1134.       TObj := TStringClass.CreateString(['AReal = ']);
  1135.       TObj.AppendReal(AReal,10,2);
  1136.       Writeln;
  1137.       Writeln('Result:');
  1138.       Writeln(TObj.ZString);
  1139.       TObj.Free;
  1140.    END;
  1141.  
  1142.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1143.  
  1144.    PROCEDURE DoAppendRight;
  1145.    VAR
  1146.       TObj : TStringClass;
  1147.    BEGIN
  1148.       Writeln('Code:');
  1149.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1150.       Writeln('TObj.AppendRight([APChar],3);');
  1151.       TObj := TStringClass.CreateString([AStr]);
  1152.       TObj.AppendRight([APChar],3);
  1153.       Writeln;
  1154.       Writeln('Result:');
  1155.       Writeln(TObj.ZString);
  1156.       TObj.Free;
  1157.    END;
  1158.  
  1159.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1160.  
  1161.    PROCEDURE DoAppendSIC;
  1162.    VAR
  1163.       TObj : TStringClass;
  1164.    BEGIN
  1165.       Writeln('Code:');
  1166.       Writeln('TObj := TStringClass.CreateString([''Call me '']);');
  1167.       Writeln('TObj.AppendSIC([''Mr Tibbs'']);');
  1168.       TObj := TStringClass.CreateString(['Call me ']);
  1169.       TObj.AppendSIC(['Mr Tibbs']);
  1170.       Writeln;
  1171.       Writeln('Result:');
  1172.       Writeln(TObj.ZString);
  1173.       TObj.Free;
  1174.    END;
  1175.  
  1176.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1177.  
  1178.    PROCEDURE DoAppendTrim;
  1179.    VAR
  1180.       TObj : TStringClass;
  1181.    BEGIN
  1182.       Writeln('Code:');
  1183.       Writeln('TObj := TStringClass.CreateString([''Call me '']);');
  1184.       Writeln('TObj.AppendTrim([''       Mr Tibbs        '']);');
  1185.       TObj := TStringClass.CreateString(['Call me ']);
  1186.       TObj.AppendTrim(['       Mr Tibbs        ']);
  1187.       Writeln;
  1188.       Writeln('Result:');
  1189.       Writeln(TObj.ZString);
  1190.       TObj.Free;
  1191.    END;
  1192.  
  1193.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1194.  
  1195.    PROCEDURE DoAppendWithTab;
  1196.    VAR
  1197.       TObj : TStringClass;
  1198.    BEGIN
  1199.       Writeln('Code:');
  1200.       Writeln('TObj := TStringClass.Create;');
  1201.       Writeln('TObj.AppendWithTab([''First'']);');
  1202.       Writeln('TObj.Append([''Second'']);');
  1203.       TObj := TStringClass.Create;
  1204.       TObj.AppendWithTab(['First']);
  1205.       TObj.Append(['Second']);
  1206.       Writeln;
  1207.       Writeln('Result:');
  1208.       Writeln(TObj.ZString);
  1209.       TObj.Free;
  1210.    END;
  1211.  
  1212.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1213.  
  1214.    PROCEDURE DoNLAppend;
  1215.    VAR
  1216.       TObj : TStringClass;
  1217.    BEGIN
  1218.       Writeln('Code:');
  1219.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1220.       Writeln('TObj.NLAppend([APChar]);');
  1221.       TObj := TStringClass.CreateString([AStr]);
  1222.       TObj.NLAppend([APChar]);
  1223.       Writeln;
  1224.       Writeln('Result:');
  1225.       Writeln(TObj.ZString);
  1226.       TObj.Free;
  1227.    END;
  1228.  
  1229.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1230.  
  1231.    PROCEDURE DoPrepend;
  1232.    VAR
  1233.       TObj : TStringClass;
  1234.    BEGIN
  1235.       Writeln('Code:');
  1236.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1237.       Writeln('TObj.Prepend([APChar]);');
  1238.       TObj := TStringClass.CreateString([AStr]);
  1239.       TObj.Prepend([APChar]);
  1240.       Writeln;
  1241.       Writeln('Result:');
  1242.       Writeln(TObj.ZString);
  1243.       TObj.Free;
  1244.    END;
  1245.  
  1246.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1247.  
  1248.    PROCEDURE DoFirstNonSpaceCh;
  1249.    VAR
  1250.       TObj : TStringClass;
  1251.       w : WORD;
  1252.       ACh : CHAR;
  1253.    BEGIN
  1254.       Writeln('Code:');
  1255.       Writeln('TObj := TStringClass.CreateString([''      '',AStr]);');
  1256.       Writeln('w := TObj.FirstNonSpaceCh(ACh);');
  1257.       TObj := TStringClass.CreateString(['      ',AStr]);
  1258.       w := TObj.FirstNonSpaceCh(ACh);
  1259.       Writeln;
  1260.       Writeln('Result:');
  1261.       Writeln(TObj.ZString);
  1262.       Writeln('First non space char at base zero position ',w,' and is a ',ACh,' character');
  1263.       TObj.Free;
  1264.    END;
  1265.  
  1266.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1267.  
  1268.    PROCEDURE DoHasCh;
  1269.    VAR
  1270.       TObj : TStringClass;
  1271.       w : WORD;
  1272.       ACh : CHAR;
  1273.       b : boolean;
  1274.    BEGIN
  1275.       Writeln('Code:');
  1276.       Writeln('ACh := ''c'';');
  1277.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1278.       Writeln('b := TObj.HasCh(ACh,w);');
  1279.       ACh := 'c';
  1280.       TObj := TStringClass.CreateString([AStr]);
  1281.       b := TObj.HasCh(ACh,w);
  1282.       Writeln;
  1283.       Writeln('Result:');
  1284.       Writeln(TObj.ZString);
  1285.       IF b THEN
  1286.       BEGIN
  1287.          Write('Character ',ACh,' is found within the string');
  1288.          Writeln(' at position ',w);
  1289.       END
  1290.       ELSE
  1291.          Writeln('Character ',ACh,' is NOT found within the string');
  1292.       TObj.Free;
  1293.    END;
  1294.  
  1295.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1296.  
  1297.    PROCEDURE DoIsCh;
  1298.    VAR
  1299.       TObj : TStringClass;
  1300.       w : WORD;
  1301.       ACh : CHAR;
  1302.       b : boolean;
  1303.    BEGIN
  1304.       Writeln('Code:');
  1305.       Writeln('ACh := ''c'';');
  1306.       Writeln('TObj := TStringClass.CreateString([AStr]);');
  1307.       Writeln('b := TObj.IsCh(3,ACh);');
  1308.       ACh := 'c';
  1309.       TObj := TStringClass.CreateString([AStr]);
  1310.       b := TObj.IsCh(3,ACh);
  1311.       Writeln;
  1312.       Writeln('Result:');
  1313.       Writeln(TObj.ZString);
  1314.       IF b THEN
  1315.       BEGIN
  1316.          Writeln('Character ',ACh,' is found at position 3');
  1317.       END
  1318.       ELSE
  1319.          Writeln('Character ',ACh,' is NOT found at position 3');
  1320.       TObj.Free;
  1321.    END;
  1322.  
  1323.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1324.  
  1325.    PROCEDURE DoFromRGB;
  1326.    VAR
  1327.       TObj : TStringClass;
  1328.       C : TColorRef;
  1329.    BEGIN
  1330.       Writeln('Code:');
  1331.       Writeln('TObj := TStringClass.Create;');
  1332.       Writeln('C := RGB(255,255,0);');
  1333.       Writeln('TObj.FromRGB(C);');
  1334.       TObj := TStringClass.Create;
  1335.       C := RGB(255,255,0);
  1336.       TObj.FromRGB(C);
  1337.       Writeln;
  1338.       Writeln('Result:');
  1339.       Writeln(TObj.ZString);
  1340.       TObj.Free;
  1341.    END;
  1342.  
  1343.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1344.  
  1345.    PROCEDURE DoFindCmdLine;
  1346.    VAR
  1347.       TObj : TStringClass;
  1348.    BEGIN
  1349.       Writeln('Code:');
  1350.       Writeln('TObj := TStringClass.Create;');
  1351.       Writeln('TObj.FindCmdLine;');
  1352.       TObj := TStringClass.Create;
  1353.       TObj.FindCmdLine;
  1354.       Writeln;
  1355.       Writeln('Result:');
  1356.       Writeln(TObj.ZString);
  1357.       TObj.Free;
  1358.    END;
  1359.  
  1360.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1361.  
  1362.    PROCEDURE DoJustExtension;
  1363.    VAR
  1364.       TObj : TStringClass;
  1365.    BEGIN
  1366.       Writeln('Code:');
  1367.       Writeln('TObj := TStringClass.Create;');
  1368.       Writeln('TObj.JustExtension([APath]);');
  1369.       TObj := TStringClass.Create;
  1370.       TObj.JustExtension([APath]);
  1371.       Writeln;
  1372.       Writeln('Result:');
  1373.       Writeln(TObj.ZString);
  1374.       TObj.Free;
  1375.    END;
  1376.  
  1377.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1378.  
  1379.    PROCEDURE DoJustFileName;
  1380.    VAR
  1381.       TObj : TStringClass;
  1382.    BEGIN
  1383.       Writeln('Code:');
  1384.       Writeln('TObj := TStringClass.Create;');
  1385.       Writeln('TObj.JustFileName([APath]);');
  1386.       TObj := TStringClass.Create;
  1387.       TObj.JustFileName([APath]);
  1388.       Writeln;
  1389.       Writeln('Result:');
  1390.       Writeln(TObj.ZString);
  1391.       TObj.Free;
  1392.    END;
  1393.  
  1394.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1395.  
  1396.    PROCEDURE DoJustName;
  1397.    VAR
  1398.       TObj : TStringClass;
  1399.    BEGIN
  1400.       Writeln('Code:');
  1401.       Writeln('TObj := TStringClass.Create;');
  1402.       Writeln('TObj.JustName([APath]);');
  1403.       TObj := TStringClass.Create;
  1404.       TObj.JustName([APath]);
  1405.       Writeln;
  1406.       Writeln('Result:');
  1407.       Writeln(TObj.ZString);
  1408.       TObj.Free;
  1409.    END;
  1410.  
  1411.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1412.  
  1413.    PROCEDURE DoJustDirectory;
  1414.    VAR
  1415.       TObj : TStringClass;
  1416.    BEGIN
  1417.       Writeln('Code:');
  1418.       Writeln('TObj := TStringClass.Create;');
  1419.       Writeln('TObj.JustDirectory([APath]);');
  1420.       TObj := TStringClass.Create;
  1421.       TObj.JustDirectory([APath]);
  1422.       Writeln;
  1423.       Writeln('Result:');
  1424.       Writeln(TObj.ZString);
  1425.       TObj.Free;
  1426.    END;
  1427.  
  1428.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1429.  
  1430.    PROCEDURE DoReplaceAll;
  1431.    VAR
  1432.       TObj : TStringClass;
  1433.    BEGIN
  1434.       Writeln('Code:');
  1435.       Writeln('TObj := TStringClass.CreateString([AStr,'' '',APChar]);');
  1436.       Writeln('TObj.ReplaceAll([''string''],[''text'']);');
  1437.       TObj := TStringClass.CreateString([AStr,' ',APChar]);
  1438.       TObj.ReplaceAll(['string'],['text']);
  1439.       Writeln;
  1440.       Writeln('Result:');
  1441.       Writeln(TObj.ZString);
  1442.       TObj.Free;
  1443.    END;
  1444.  
  1445.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1446.  
  1447.    PROCEDURE DoParseDelimToList;
  1448.    VAR
  1449.       TObj : TStringClass;
  1450.       AList : TObjectContainer;
  1451.  
  1452.       { ++++++++++++++++++++++++++++++++++++++++++++++ }
  1453.  
  1454.       PROCEDURE WrSub(S : TStringClass); FAR;
  1455.       BEGIN
  1456.          Writeln(S.ZString);
  1457.       END;
  1458.  
  1459.       { ++++++++++++++++++++++++++++++++++++++++++++++ }
  1460.  
  1461.    BEGIN
  1462.       Writeln('Code:');
  1463.       Writeln('AList := TObjectContainer.Create;');
  1464.       Writeln('AList.Capacity := 100;');
  1465.       Writeln('TObj := TStringClass.CreateString([''xxx,yyy,zzzz,wwww,,qqqq,rrrr'']);');
  1466.       Writeln('TObj.ParseDelimToList('','',delim_None,AList);');
  1467.       Writeln('AList.ForEach(@WrSub);');
  1468.       AList := TObjectContainer.Create;
  1469.       AList.Capacity := 100;
  1470.       TObj := TStringClass.CreateString(['xxx,yyy,zzzz,wwww,,qqqq,rrrr']);
  1471.       TObj.ParseDelimToList(',',delim_None,AList);
  1472.       Writeln;
  1473.       Writeln('Result:');
  1474.       Writeln(TObj.ZString);
  1475.       Writeln('Parsed sub strings ...');
  1476.       AList.ForEach(@WrSub);
  1477.       TObj.Free;
  1478.       AList.Free;
  1479.    END;
  1480.  
  1481.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1482.  
  1483.    PROCEDURE DoDirectoryExists;
  1484.    VAR
  1485.       TObj : TStringClass;
  1486.    BEGIN
  1487.       Writeln('Code:');
  1488.       Writeln('TObj := TStringClass.CreateString([APath]);');
  1489.       Writeln('B := TObj.DirectoryExists;');
  1490.       TObj := TStringClass.CreateString([APath]);
  1491.       Writeln;
  1492.       Writeln('Result:');
  1493.       Writeln(TObj.ZString);
  1494.       Write('Directory ');
  1495.       IF TObj.DirectoryExists THEN
  1496.          Writeln('exists')
  1497.       ELSE
  1498.          Writeln('does not exist');
  1499.       TObj.Free;
  1500.    END;
  1501.  
  1502.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1503.  
  1504.    PROCEDURE DoFindCurrentDir;
  1505.    VAR
  1506.       TObj : TStringClass;
  1507.    BEGIN
  1508.       Writeln('Code:');
  1509.       Writeln('TObj := TStringClass.Create;');
  1510.       Writeln('TObj.FindCurrentDir;');
  1511.       TObj := TStringClass.Create;
  1512.       TObj.FindCurrentDir;
  1513.       Writeln;
  1514.       Writeln('Result:');
  1515.       Writeln(TObj.ZString);
  1516.       TObj.Free;
  1517.    END;
  1518.  
  1519.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1520.  
  1521.    PROCEDURE DoFileExists;
  1522.    VAR
  1523.       TObj : TStringClass;
  1524.    BEGIN
  1525.       Writeln('Code:');
  1526.       Writeln('TObj := TStringClass.CreateString([APath]);');
  1527.       TObj := TStringClass.CreateString([APath]);
  1528.       Writeln;
  1529.       Writeln('Result:');
  1530.       Writeln(TObj.ZString);
  1531.       Write('File ');
  1532.       IF TObj.FileExists THEN
  1533.          Writeln('exists')
  1534.       ELSE
  1535.          Writeln('does not exist');
  1536.       TObj.Free;
  1537.    END;
  1538.  
  1539.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1540.  
  1541.    PROCEDURE DoFileSplit;
  1542.    VAR
  1543.       TObj,DObj,NObj,EObj : TStringClass;
  1544.    BEGIN
  1545.       Writeln('Code:');
  1546.       Writeln('DObj := TStringClass.Create;');
  1547.       Writeln('NObj := TStringClass.Create;');
  1548.       Writeln('EObj := TStringClass.Create;');
  1549.       Writeln('TObj := TStringClass.CreateString([APath]);');
  1550.       Writeln('TObj.FileSplit(DObj,NObj,EObj);');
  1551.       DObj := TStringClass.Create;
  1552.       NObj := TStringClass.Create;
  1553.       EObj := TStringClass.Create;
  1554.       TObj := TStringClass.CreateString([APath]);
  1555.       TObj.FileSplit(DObj,NObj,EObj);
  1556.       Writeln;
  1557.       Writeln('Result:');
  1558.       Writeln(TObj.ZString);
  1559.       Writeln(DObj.ZString);
  1560.       Writeln(NObj.ZString);
  1561.       Writeln(EObj.ZString);
  1562.       TObj.Free;
  1563.       DObj.Free;
  1564.       NObj.Free;
  1565.       EObj.Free;
  1566.    END;
  1567.  
  1568.    { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1569.  
  1570. BEGIN
  1571.    ANullStrObj := TStringClass.Create;
  1572.    AStrObj := TStringClass.CreateString(['TStringClass string']);
  1573.    OutConsole.ClrScr;
  1574.    CASE fid OF
  1575.       id_Create :
  1576.          DoCreate;
  1577.       id_CreateSize :
  1578.          DoCreateSize;
  1579.       id_CreateString :
  1580.          DoCreateString;
  1581.       id_CreateStringNL :
  1582.          DoCreateStringNL;
  1583.       id_CreateBoolean :
  1584.          DoCreateBoolean;
  1585.       id_Destroy :
  1586.          DoDestroy;
  1587.       id_Copy :
  1588.          DoCopy;
  1589.       id_CopyFrom :
  1590.          DoCopyFrom;
  1591.       id_Clear :
  1592.          DoClear;
  1593.       id_Empty :
  1594.          DoEmpty;
  1595.       id_Assign :
  1596.          DoAssign;
  1597.       id_AssignFrom :
  1598.          DoAssignFrom;
  1599.       id_AssignLen :
  1600.          DoAssignLen;
  1601.       id_AssignMid :
  1602.          DoAssignMid;
  1603.       id_AssignNL :
  1604.          DoAssignNL;
  1605.       id_AssignPad :
  1606.          DoAssignPad;
  1607.       id_AssignRight :
  1608.          DoAssignRight;
  1609.       id_AssignTrim :
  1610.          DoAssignTrim;
  1611.       id_Append :
  1612.          DoAppend;
  1613.       id_AppendBoolean :
  1614.          DoAppendBoolean;
  1615.       id_AppendByte :
  1616.          DoAppendByte;
  1617.       id_AppendCh :
  1618.          DoAppendCh;
  1619.       id_AppendDIC :
  1620.          DoAppendDIC;
  1621.       id_AppendDouble :
  1622.          DoAppendDouble;
  1623.       id_AppendDoubleTrim :
  1624.          DoAppendDoubleTrim;
  1625.       id_AppendExt :
  1626.          DoAppendExt;
  1627.       id_AppendExtTrim :
  1628.          DoAppendExtTrim;
  1629.       id_AppendLen :
  1630.          DoAppendLen;
  1631.       id_AppendLong :
  1632.          DoAppendLong;
  1633.       id_AppendMid :
  1634.          DoAppendMid;
  1635.       id_AppendNL :
  1636.          DoAppendNL;
  1637.       id_AppendPad :
  1638.          DoAppendPad;
  1639.       id_AppendPtr :
  1640.          DoAppendPtr;
  1641.       id_AppendReal :
  1642.          DoAppendReal;
  1643.       id_AppendRight :
  1644.          DoAppendRight;
  1645.       id_AppendSIC :
  1646.          DoAppendSIC;
  1647.       id_AppendTrim :
  1648.          DoAppendTrim;
  1649.       id_AppendWithTab :
  1650.          DoAppendWithTab;
  1651.       id_NLAppend :
  1652.          DoNLAppend;
  1653.       id_Prepend :
  1654.          DoPrepend;
  1655.       id_FirstNonSpaceCh :
  1656.           DoFirstNonSpaceCh;
  1657.       id_HasCh :
  1658.          DoHasCh;
  1659.       id_isCh :
  1660.          DoIsCh;
  1661.           (*
  1662.       id_IsFirstCh = 44;
  1663.       id_IsLastCh = 45;
  1664.       id_LastNonSpaceCh = 46;
  1665.       id_RemoveLastCh = 47;
  1666.       id_SetCh = 48;
  1667.       id_FromBoolean = 49;
  1668.       id_FromByte = 50;
  1669.       id_FromChar = 51;
  1670.       id_FromDouble = 52;
  1671.       id_FromDoubleTrim = 53;
  1672.       id_FromExt = 54;
  1673.       id_FromExtTrim  = 55;
  1674.       id_FromLong = 56;
  1675.       id_FromPtr = 57;
  1676.       id_FromReal = 58;
  1677.       id_FromRealTrim = 59;
  1678.       *)
  1679.       id_FromRGB :
  1680.          DoFromRGB;
  1681.          (*
  1682.       id_HexFromByte = 61;
  1683.       id_HexFromLong = 62;
  1684.       id_HexFromPtr = 63;
  1685.       id_HexFromWord = 64;
  1686.       id_ToBoolean = 65;
  1687.       id_ToByte = 66;
  1688.       id_ToChar = 67;
  1689.       id_ToDouble = 68;
  1690.       id_ToExt = 69;
  1691.       id_ToInteger = 70;
  1692.       id_ToLong = 71;
  1693.       id_ToReal = 72;
  1694.       id_ToRGB = 73;
  1695.       id_ToWord = 74;
  1696.       id_AppendStr = 75;
  1697.       id_UpperCase = 76;
  1698.       id_LowerCase = 77;
  1699.       id_CompareStr = 78;
  1700.       id_CompareText = 79;
  1701.       id_AnsiUpperCase = 80;
  1702.       id_AnsiLowerCase = 81;
  1703.       id_AnsiCompareStr = 82;
  1704.       id_AnsiCompareText = 83;
  1705.       id_IsValidIdent = 84;
  1706.       id_IntToStr = 85;
  1707.       id_IntToHex = 86;
  1708.       id_StrToInt = 87;
  1709.       id_StrToIntDef = 88;
  1710.       id_LoadStr = 89;
  1711.       id_FmtLoadStr = 90;
  1712.       id_Format = 91;
  1713.       id_FloatToStr = 92;
  1714.       id_FloatToStrF = 93;
  1715.       id_FormatFloat = 94;
  1716.       id_StrToFloat = 95;
  1717.       id_StrCat = 96;
  1718.       id_StrComp = 97;
  1719.       id_StrCopy = 98;
  1720.       id_StrECopy = 99;
  1721.       id_StrEnd = 100;
  1722.       id_StrIComp = 101;
  1723.       id_StrLCat = 102;
  1724.       id_StrLIComp = 103;
  1725.       id_StrLComp = 104;
  1726.       id_StrLCopy = 105;
  1727.       id_StrLen = 106;
  1728.       id_StrLower = 107;
  1729.       id_StrMove = 108;
  1730.       id_StrPas = 109;
  1731.       id_StrPCopy = 110;
  1732.       id_StrPos = 111;
  1733.       id_StrRScan = 112;
  1734.       id_StrScan = 113;
  1735.       id_StrUpper = 114;
  1736.       id_Compare = 115;
  1737.       id_CompareI = 116;
  1738.       id_CompareL = 117;
  1739.       id_CompareLI = 118;
  1740.       id_CompareLong = 119;
  1741.       id_CompareDouble = 120;
  1742.       id_CompareExt = 121;
  1743.       id_IsSame = 122;
  1744.       id_IsSameI = 122;
  1745.       id_isSameL = 123;
  1746.       id_IsSameLI = 124;
  1747.       id_Includes = 125;
  1748.       id_Within = 126;
  1749.       id_Delete = 127;
  1750.       id_Insert = 128;
  1751.       id_InsertL = 129;
  1752.       id_PadCentre = 130;
  1753.       id_PadEnd = 131;
  1754.       id_PadFront = 132;
  1755.       id_RemoveDIC = 133;
  1756.       id_RemoveSIC = 134;
  1757.       id_Trim = 135;
  1758.       id_TrimEnd = 136;
  1759.       id_TrimFront = 137;
  1760.       id_TrimZero = 138;
  1761.       *)
  1762.       id_FindCmdLine :
  1763.          DoFindCmdLine;
  1764.       (*
  1765.       id_FindCmdLineAndParse = 140;
  1766.       id_FindCmdLineParam = 141;
  1767.       id_AppendStringRes = 142;
  1768.       id_LoadStringRes = 143;
  1769.       id_ReadIniKeyword = 144;
  1770.       id_WriteIniKeyword = 145;
  1771.       id_FindIniSectionKeywords = 146;
  1772.       id_AddBackSlash = 147;
  1773.       id_BuildPathName = 148;
  1774.       id_DefaultExtension = 149;
  1775.       id_ExpandFileName = 150;
  1776.       id_ForceExtension = 151;
  1777.       id_HasBackSlash = 152;
  1778.       id_HasDrive = 153;
  1779.       id_HasExtension = 154;
  1780.       id_HasFileName = 155;
  1781.       id_HasDirectory = 156;
  1782.       *)
  1783.       id_FindCurrentDir :
  1784.          DoFindCurrentDir;
  1785.       id_DirectoryExists :
  1786.          DoDirectoryExists;
  1787.       (*
  1788.       id_DriveExists = 158;
  1789.       *)
  1790.       id_FileExists :
  1791.          DoFileExists;
  1792.       id_FileSplit :
  1793.          DoFileSplit;
  1794.       id_JustExtension :
  1795.          DoJustExtension;
  1796.       id_JustFileName :
  1797.          DoJustFileName;
  1798.       id_JustName :
  1799.          DoJustName;
  1800.       id_JustDirectory :
  1801.          DoJustDirectory;
  1802.          (*
  1803.       id_SetCurDir = 163;
  1804.       id_ChCount = 164;
  1805.       id_FindBetween2Ch = 165;
  1806.       id_FindFirst = 166;
  1807.       id_FindFirstCh = 167;
  1808.       id_FindLast = 168;
  1809.       id_FindLastCh = 169;
  1810.       id_FindNext = 170;
  1811.       id_FindNextCh = 171;
  1812.       id_FindPrev = 172;
  1813.       id_FindPrevCh = 173;
  1814.       id_SubStrCount = 174;
  1815.       id_FirstCharToUpper = 175;
  1816.       id_IsAlphaNumeric = 176;
  1817.       id_ToLower = 177;
  1818.       id_ToUpper = 178;
  1819.       *)
  1820.       id_ReplaceAll :
  1821.          DoReplaceAll;
  1822.       (*
  1823.       id_ReplaceFirst = 180;
  1824.       id_ReplaceLast = 181;
  1825.       id_ReplaceChAll = 182;
  1826.       id_ReplaceChFirst = 183;
  1827.       id_ReplaceChLast = 184;
  1828.       id_FirstParseDelim = 185;
  1829.       id_NextParseDelim = 186;
  1830.       id_ParseDelimCount = 187;
  1831.       *)
  1832.       id_ParseDelimToList :
  1833.          DoParseDelimToList;
  1834.       (*
  1835.       id_ParsePosToList = 189;
  1836.       *)
  1837.  
  1838.    END;
  1839.    { scroll to top }
  1840.    OutConsole.ScrollTo(0,0);
  1841. END;
  1842. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  1843.  
  1844. end.
  1845.